import type { PageParam, PageResult } from '@vben/request';
import type { Dayjs } from 'dayjs';

import { requestClient } from '#/api/request';

export namespace RoomApi {
  /** 房间使用记录信息 */
  export interface RoomUsage {
    id: number; // 主键ID
    roomId?: number; // 房间ID
    roomNumber?: string; // 房间号
    billId?: number; // 账单ID
    usageType: string; // 使用类型
    startTime?: string | Dayjs; // 开始时间
    endTime: string | Dayjs; // 结束时间
    durationMinutes: number; // 使用时长(分钟)
    occupancyCount: number; // 占用人数
    status: string; // 状态
    operatorId: number; // 操作员ID
    operatorName: string; // 操作员姓名
    remarks: string; // 备注
  }

  /** SPA房间环境监控信息 */
  export interface RoomEnvironment {
    id: number; // 主键ID
    roomId?: number; // 房间ID
    monitorTime?: string | Dayjs; // 监控时间
    temperature: number; // 温度(°C)
    humidity: number; // 湿度(%)
    airQuality: string; // 空气质量
    noiseLevel: number; // 噪音水平(dB)
    lightingLevel: number; // 光照水平(lux)
    waterTemperature: number; // 水温(°C)
    waterQuality: string; // 水质
    environmentMetrics: string; // 环境指标JSON
    scope: string; // 权限范围
    scoperef: string; // 权限引用
    storeId?: number; // 门店ID
  }

  /** 房间信息信息 */
  export interface Room {
    id: number; // 主键ID
    roomNumber?: string; // 房间号
    roomName: string; // 房间名称
    roomType?: string; // 房间类型
    status?: string; // 房间状态
    capacity: number; // 容纳人数
    occupiedCount: number; // 当前占用人数
    handCardId: number; // 关联手牌ID
    currentBookingId: number; // 当前预约ID
    openTime: string | Dayjs; // 开房时间
    lastCleanTime: string | Dayjs; // 最后清洁时间
    nextCleanTime: string | Dayjs; // 下次清洁时间
    floor: string; // 楼层
    area: string; // 区域
    equipment: string; // 设备配置
    amenities: string; // 配套设施
    cleaningRequirements: string; // 清洁要求
    maintenanceSchedule: string; // 维护计划
    notes: string; // 备注
    orgId?: number; // 组织ID
    storeId?: number; // 门店ID
    pricePerHour: number; // 每小时价格
    roomSize: number; // 房间面积(平方米)
    environmentControl: string; // 环境控制JSON
    iotDevices: string; // IoT设备JSON
    scope: string; // 权限范围
    scoperef: string; // 权限引用
    roomusages?: RoomUsage[];
    roomenvironments?: RoomEnvironment[];
  }
}

/** 查询房间信息分页 */
export function getRoomPage(params: PageParam) {
  return requestClient.get<PageResult<RoomApi.Room>>('/spa/room/page', {
    params,
  });
}

/** 查询房间信息详情 */
export function getRoom(id: number) {
  return requestClient.get<RoomApi.Room>(`/spa/room/get?id=${id}`);
}

/** 新增房间信息 */
export function createRoom(data: RoomApi.Room) {
  return requestClient.post('/spa/room/create', data);
}

/** 修改房间信息 */
export function updateRoom(data: RoomApi.Room) {
  return requestClient.put('/spa/room/update', data);
}

/** 删除房间信息 */
export function deleteRoom(id: number) {
  return requestClient.delete(`/spa/room/delete?id=${id}`);
}

/** 导出房间信息 */
export function exportRoom(params: any) {
  return requestClient.download('/spa/room/export-excel', { params });
}

// ==================== 子表（房间使用记录） ====================

/** 获得房间使用记录列表 */
export function getRoomUsageListByRoomId(roomId: number) {
  return requestClient.get<RoomApi.RoomUsage[]>(
    `/spa/room/room-usage/list-by-room-id?roomId=${roomId}`,
  );
}

// ==================== 子表（SPA房间环境监控） ====================

/** 获得SPA房间环境监控列表 */
export function getRoomEnvironmentListByRoomId(roomId: number) {
  return requestClient.get<RoomApi.RoomEnvironment[]>(
    `/spa/room/room-environment/list-by-room-id?roomId=${roomId}`,
  );
}
